/*
 * CodeContext.java	 
 *
 * Copyright 2011 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 07/10/11, 11:23:38 AM
 */
package com.ufps.cuatro.util.generadores.codeobject;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * <i><b>CodeContext:</b></i><p>Esta Clase Abstracta define la estructura básica
 * para la generación del Código Fuente de las representaciones generadas por un
 * Modelo Analizado.</p> 
 * <p>Un Código de Contexto representa un área de procesameinto en el cuál se
 * analizarán los Componentes que representan Áreas de Interfaces Gráficas (GUI)  y
 * que a su vez han sido incluidos en el Objeto Contenedor del Contexto.
 * Es decir un Contexto determina el Alcance
 * de la Generación de Código solo tomando aquellos Componentes que lo 
 * Conformen por lo tanto cada Contexto debe definir asi mismo su alcance y
 * area de procesameinto al igual que se debe apoyar por las interfaces que
 * determinan los Procesos que aplican.</p>
 * 
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 07/10/11
 * @see     CodeConstants 
 */
public abstract class CodeContext implements CodeConstants{                 
    private HashMap<String, Object> objValues;
    private ArrayList<String> objSentences;
    /**
     * Contructor por Defecto que inicliza el Contexto y área de Procesamiento.
     */
    public CodeContext() {
        this.objValues = new HashMap<String, Object>();
        this.objSentences = new ArrayList<String>();
    }    
    
    /**
     * Agrega un Objeto al área de Procesamiento del Contexto por lo generar son
     * variables que se utilizarán en la Plantilla del Generador de Código Fuente.
     * @param key Llave del Registro.
     * @param value Objeto que se Agregará al Área de Procesamiento.
     */
    public void add(String key, Object value){
        objValues.put(key, value);
    }
    
    /**
     * Devuelve un Objeto del área de Procesamiento del Contexto por lo generar es
     * una variables que se utilizará en la Plantilla del Generador de Código Fuente.
     * @param key Llave del Registro.
     * @return Objeto que se utilizará en el Área de Procesamiento.
     */
    public Object get(String key){
        return objValues.get(key);
    }

    /**
     * Devuelve el Mapa de Opciones agregadas en la Generación de Código.
     * @return Mapa de Opciones agregadas en la Generación de Código.
     */
    public HashMap<String, Object> getObjValues() {
        return objValues;
    }

    /**
     * Devuelve la Lista de Sentencias identificadas en la Generación de Código.
     * @return Lista de Sentencias identificadas en la Generación de Código.
     */
    public ArrayList<String> getObjSentences() {
        return objSentences;
    }
}